/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package persistencia.Decoradores;

import entidadesNegocio.ListaMateriales;
import excepciones.ExpertoProveedoresException;
import persistencia.Conexion;

/**
 *
 * @author diego
 */
public class DecoradorProveedores extends expertos.ExpertoProveedores {

    private Boolean TXiniciada = false;

    @Override
    public void guardarProveedor() throws ExpertoProveedoresException {
        try {
            Conexion.getInstancia().iniciarTX();
            super.guardarProveedor();
            Conexion.getInstancia().confirmarTx();
        } catch (ExpertoProveedoresException ex) {
            Conexion.getInstancia().deshacerTx();
            throw ex;
        }
    }

    @Override
    public void guardarListaMateriales(ListaMateriales lista) throws ExpertoProveedoresException {
        if (TXiniciada) {//Si ya hay una transaccion realizada no debo volver a iniciar una transaccion
            try {
                super.guardarListaMateriales(lista);
            } catch (ExpertoProveedoresException expertoProveedoresException) {
                throw expertoProveedoresException;
            }
            return;
        }

        try {
            Conexion.getInstancia().iniciarTX();
            super.guardarListaMateriales(lista);
            Conexion.getInstancia().confirmarTx();
        } catch (ExpertoProveedoresException expertoProveedoresException) {
            Conexion.getInstancia().deshacerTx();
            throw expertoProveedoresException;
        }
    }

    @Override
    public void crearNuevaListaMaterialesProveedorSeleccionado(ListaMateriales listaParaCopiar) throws ExpertoProveedoresException {
        try {
            Conexion.getInstancia().iniciarTX();
            TXiniciada = true;
            super.crearNuevaListaMaterialesProveedorSeleccionado(listaParaCopiar);
            Conexion.getInstancia().confirmarTx();
        } catch (ExpertoProveedoresException ex) {
            Conexion.getInstancia().deshacerTx();
            throw ex;
        } finally {
            TXiniciada = false;
        }
    }

    @Override
    public void eliminarProveedorSeleccionado() throws ExpertoProveedoresException {
        try {
            Conexion.getInstancia().iniciarTX();
            super.eliminarProveedorSeleccionado();
            Conexion.getInstancia().confirmarTx();
        } catch (ExpertoProveedoresException ex) {
            Conexion.getInstancia().deshacerTx();
            throw ex;
        }

    }
}
